package br.com.admGearman.consulta.vo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Formula;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.admGearman.cadastro.vo.ArquivoVo;
import br.com.admGearman.cadastro.vo.BandeiraVo;
import br.com.admGearman.cadastro.vo.DatasVo;
import br.com.admGearman.cadastro.vo.EstEmpresaVo;
import br.com.admGearman.cadastro.vo.LojaVo;
import br.com.admGearman.cadastro.vo.LoteBandeiraVo;
import br.com.admGearman.cadastro.vo.RedeAdquirenteVo;
import br.com.admGearman.cadastro.vo.filtro.FiltroControleLogBaixaVo;
import br.com.r2.util.tipodado.DataHora;
import br.com.r2.util.tipodado.Inteiro;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Moeda;

@Entity
@Table(name = "CTL_LOG_BAIXA")
@Proxy(lazy = false)
public class ControleLogBaixaVo implements Serializable
{

   /**
    * 
    */
   private static final long serialVersionUID = -218997331230849094L;

   @Id
   @Column(name = "ID")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "EST_EMPRESA")
   private EstEmpresaVo estEmpresaVo;

   @Column(name = "PROCESSAMENTO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataHoraUT")
   private DataHora dataProcessamento;

   @Column(name = "VALOR_A_PAGAR")
   @Type(type = "br.com.r2.util.tipodado.hibernate.MoedaUT")
   private Moeda valorAPagar;

   @Column(name = "VALOR_PAGO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.MoedaUT")
   private Moeda valorPago;

   @Column(name = "PARCELA")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro parcela;

   @Column(name = "PLANO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro plano;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_DATAVENDA")
   private DatasVo dataVendaVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_BANDEIRA")
   private BandeiraVo bandeiraVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_LOTEBANDEIRA")
   private LoteBandeiraVo loteBandeiraVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_DATAPAGAMENTO")
   private DatasVo dataPagamentoVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_LOJA")
   private LojaVo lojaVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_REDE")
   private RedeAdquirenteVo redeAdquirenteVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_ARQUIVO")
   private ArquivoVo arquivoVo;

   @Formula("(VALOR_PAGO - VALOR_A_PAGAR)")
   @Type(type = "br.com.r2.util.tipodado.hibernate.MoedaUT")
   private Moeda valorDiferenca;

   @Column(name = "NUMERO_RESUMO_VENDA")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo numeroResumoVenda;

   @Transient
   private FiltroControleLogBaixaVo filtro;
   
   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public EstEmpresaVo getEstEmpresaVo()
   {
      return estEmpresaVo;
   }

   public void setEstEmpresaVo(EstEmpresaVo estEmpresaVo)
   {
      this.estEmpresaVo = estEmpresaVo;
   }

   public DataHora getDataProcessamento()
   {
      return dataProcessamento;
   }

   public void setDataProcessamento(DataHora dataProcessamento)
   {
      this.dataProcessamento = dataProcessamento;
   }

   public Moeda getValorAPagar()
   {
      return valorAPagar;
   }

   public void setValorAPagar(Moeda valorAPagar)
   {
      this.valorAPagar = valorAPagar;
   }

   public Moeda getValorPago()
   {
      return valorPago;
   }

   public void setValorPago(Moeda valorPago)
   {
      this.valorPago = valorPago;
   }

   public Inteiro getParcela()
   {
      return parcela;
   }

   public void setParcela(Inteiro parcela)
   {
      this.parcela = parcela;
   }

   public Inteiro getPlano()
   {
      return plano;
   }

   public void setPlano(Inteiro plano)
   {
      this.plano = plano;
   }

   public DatasVo getDataVendaVo()
   {
      return dataVendaVo;
   }

   public void setDataVendaVo(DatasVo dataVendaVo)
   {
      this.dataVendaVo = dataVendaVo;
   }

   public BandeiraVo getBandeiraVo()
   {
      return bandeiraVo;
   }

   public void setBandeiraVo(BandeiraVo bandeiraVo)
   {
      this.bandeiraVo = bandeiraVo;
   }

   public LoteBandeiraVo getLoteBandeiraVo()
   {
      return loteBandeiraVo;
   }

   public void setLoteBandeiraVo(LoteBandeiraVo loteBandeiraVo)
   {
      this.loteBandeiraVo = loteBandeiraVo;
   }

   public DatasVo getDataPagamentoVo()
   {
      return dataPagamentoVo;
   }

   public void setDataPagamentoVo(DatasVo dataPagamentoVo)
   {
      this.dataPagamentoVo = dataPagamentoVo;
   }

   public LojaVo getLojaVo()
   {
      return lojaVo;
   }

   public void setLojaVo(LojaVo lojaVo)
   {
      this.lojaVo = lojaVo;
   }

   public RedeAdquirenteVo getRedeAdquirenteVo()
   {
      return redeAdquirenteVo;
   }

   public void setRedeAdquirenteVo(RedeAdquirenteVo redeAdquirenteVo)
   {
      this.redeAdquirenteVo = redeAdquirenteVo;
   }

   public ArquivoVo getArquivoVo()
   {
      return arquivoVo;
   }

   public void setArquivoVo(ArquivoVo arquivoVo)
   {
      this.arquivoVo = arquivoVo;
   }

   public Moeda getValorDiferenca()
   {
      return valorDiferenca;
   }

   public void setValorDiferenca(Moeda valorDiferenca)
   {
      this.valorDiferenca = valorDiferenca;
   }

   public InteiroLongo getNumeroResumoVenda()
   {
      return numeroResumoVenda;
   }

   public void setNumeroResumoVenda(InteiroLongo numeroResumoVenda)
   {
      this.numeroResumoVenda = numeroResumoVenda;
   }

   public FiltroControleLogBaixaVo getFiltro()
   {
      return filtro;
   }

   public void setFiltro(FiltroControleLogBaixaVo filtro)
   {
      this.filtro = filtro;
   }

}
